home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 June
/
EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso
/
earcd
/
utilmus
/
prtrk352.lha
/
ProTracker
/
Source
/
PED.asm
< prev
next >
Wrap
Assembly Source File
|
1996-05-02
|
21KB
|
1,160 lines
;*********************************************
;* Rewritten PresetEditor for Protracker Pro *
;* ASM= ASM One/Oma *
;* CPU= Any *
;* Ver= 1991 Amiga Freelancers PT1.1 *
;* 1996 TEC Design debugged and impr. *
;* 1.2.96 = reworked text outputs (debug) *
;* 2.2.96 = debugged dbf loops *
;* 6.2.96 = debugged insertpreset for use *
;* spaces in filenames *
;* 12.3.96 = reworked whole screen design *
;*********************************************
;-------------------- PED ---------------------
PresetEditor: CLR.B RawKeyCode
CMP.B #4,CurrScreen
BNE.S startmeup
JMP PED_Exit
startmeup: JSR TopExit ;included
JSR WaitForButtonUp
MOVE.B #4,CurrScreen
;SF ScopeEnable
ST NoSampleInfo
BSR.B SwapPresEdScreen
BSR.W DctMainScr1_7
BEQ.W pedexi2
PED_Refresh: CLR.W PED_Action
PED_Refresh2: MOVEA.L TextBplPtr(PC),A0
MOVE.W #$0987,D0
pedloop: CLR.L (A0)+
DBRA D0,pedloop
JSR SetNormalPtrCol
BSR.W ShowPEDnumbers
BSR.W ShowPresetNames
BSR.W PED_OneDown
BSR.W PED_OneUp
RTS
SwapPresEdScreen:
MOVE.L DecompMemPtr,D0
BEQ.B speds2
MOVEA.L D0,A1
BSR.B speds3
JMP FreeDecompMem
speds2: LEA PresetEdData,A0
JSR Decompact
BNE.B speds3
RTS
speds3: LEA zeropoint,A0
MOVEQ #1,D2
MOVEQ #0,D3
spesloop1:
MOVE.W #$04C3,D0
spesloop2:
MOVE.L (A0),D1
MOVE.L (A1),(A0)+
ADDI.W #4,D3
CMPI.W #$0028,D3
BNE.B spesloop3
LEA $0028(A0),A0
MOVEQ #0,D3
spesloop3:
MOVE.L D1,(A1)+
DBRA D0,spesloop2
LEA $29E0(A0),A0
DBRA D2,spesloop1
MOVEQ #-1,D0
RTS
;-------------- rewritten for mousetable ------------
CheckPresEdGadgs:
MOVEM.W (MouseX2),D0/D1
LEA PEDGadgData,A0
JSR ConvMousTabl
TST.W D2
BEQ.W peddygto
CMP.W #$11,D2
BEQ.W PED_Exit
CMP.W #01,D2
BEQ.W CheckPEDnames ;hit a filename
CMP.W #02,D2
BEQ.W PED_GotoPLST
CMP.W #03,D2
BEQ.W PED_DeleteDisk
CMP.W #04,D2
BEQ.W PED_Delete
CMP.W #05,D2
BEQ.W PED_Insert
CMP.W #06,D2
BEQ.W PED_AddPathGadg
CMP.W #07,D2
BEQ.W PED_ClearPLST
CMP.W #08,D2
BEQ.W PED_EnterPath
CMPI.W #09,D2
BEQ.W PED_Print
CMPI.W #$0A,D2
BEQ.W WritePLST
CMPI.W #$0B,D2
BEQ.S xLoadPLST
CMP.W #$0F,D2
BEQ.W PED_Bottom
CMP.W #$0D,D2
BEQ.W PED_OneDown
CMP.W #$10,D2
BEQ.S PED_Exit
CMP.W #$0C,D2
BEQ.W PED_OneUp
CMP.W #$0E,D2
BEQ.W PED_Top
CMP.W #$12,D2
BEQ.W PED_Disk
peddygto:
JSR ChkMainright
RTS
xLoadPLST: BSR.W LoadPLST
MOVE.W #1,PEDPos
BRA.W PED_Refresh
PED_GotoPLST: BSR.B PED_Exit
BRA.W PLST
PED_Exit:
MOVE.L #$FFFFFFFF,lbL001AFC
MOVE.L #$FFFFFFFF,lbL001B00
MOVE.L #$FFFFFFFF,lbL001B04
CMPI.W #$FFFF,lbW000E14
JSR WaitForButtonUp
BSR.W PLSTCheckNum
BSR.W SwapPresEdScreen
MOVEA.L TextBplPtr(PC),A0
MOVE.W #$0987,D0
pedeloop:
CLR.L (A0)+
DBRA D0,pedeloop
CLR.B RawKeyCode
pedexi2:
JSR DisplayMainAll
RTS
PED_AddPathGadg:
TST.L PLSTmem
BNE.B pedawok
BSR.W AllocPLST
TST.L PLSTmem
BEQ.W PLSTMemErr
pedawok:
MOVEA.L DOSBase(PC),A6
MOVE.L #PEdDefaultPath,D1
MOVEQ #-2,D2
JSR -$0054(A6) ;lock Dir
MOVE.L D0,FileLock
BEQ.W UnlockReadPath
JSR SetDiskPtrCol
LEA AddingPathText(PC),A0
BSR.W ShowStatusText
MOVEA.L DOSBase(PC),A6
MOVE.L FileLock(PC),D1
MOVE.L #FileInfoBlock,D2
JSR -$0066(A6) ;Examine
TST.L D0
BPL.W UnlockReadPath
TST.L FIB_EntryType
BPL.B CheckPathDirName
BSR.W AddPreset
BRA.S IsPLSTFull
CheckPathDirName:
CMP.B #'-',FIB_FileName+2
BNE.S IsPLSTFull
MOVE.B FIB_FileName+3,SndDiskNum0
MOVE.B FIB_FileName+4,SndDiskNum1
BSR.W ShowPEDnumbers
IsPLSTFull:
MOVE PresetTotal(PC),D0
CMP MaxPLSTEntries,D0
BCS.S ReadPathNext
BSR.W PLSTisFull
BRA.W ReadPathEnd
ReadPathNext:
MOVEA.L DOSBase(PC),A6
MOVE.L FileLock(PC),D1
MOVE.L #FileInfoBlock,D2
JSR -$006C(A6) ;ExNext
TST.L D0
BPL.W ReadPathEnd
BTST #2,$00DFF016
BEQ.W ReadPathEnd
TST.L FIB_EntryType
BPL.B IsPLSTFull
CMPI.L #'.inf',FIB_FileName
BEQ.B IsPLSTFull
CMP.L #'.inf',FIB_FileName+4
BEQ.B IsPLSTFull
LEA FIB_FileName,A0
MOVEQ #$1C,D0
ckcou: CMP.B #$2E,(A0)+
BEQ.W CouldBeInfo
DBRA D0,ckcou
rpnskip:
CLR PresetRepeat
MOVE #1,PresetReplen
LEA PEdDefaultPath,A0 ;get pointer to samples
JSR CopyPath
LEA FIB_FileName,A0
;--------- raw test ok, now check for IFF
rpncpfn:
MOVE.B (A0)+,(A1)+
BNE.B rpncpfn
MOVE.L #FileName,D1
MOVE.L #$000003ED,D2
MOVEA.L DOSBase(PC),A6
JSR -$001E(A6) ;open
MOVE.L D0,FileHandle
BEQ.B rpnskp2
MOVE.L D0,D1
LEA chkiffbuffer(PC),A2
CLR.L (A2)
MOVE.L A2,D2
MOVEQ #12,D3
JSR -$002A(A6) ;read
CMPI.L #'FORM',(A2)
BNE.B rpnclse
CMPI.L #'8SVX',8(A2)
BNE.B rpnclse
rpnvhdr:
MOVE.L FileHandle(PC),D1
MOVE.L A2,D2
MOVEQ #4,D3
JSR -$002A(A6) ;read
TST.L D0
BEQ.B rpnclse ;read error
CMPI.L #'VHDR',(A2)
BNE.B rpnvhdr
MOVE.L FileHandle(PC),D1
MOVE.L A2,D2
MOVEQ #12,D3
JSR -$002A(A6)
MOVE.L 8(A2),D0
BEQ.B rpnclse
LSR.L #1,D0
MOVE.W D0,PresetReplen
MOVE.L 4(A2),D0
LSR.L #1,D0
MOVE.W D0,PresetRepeat
rpnclse:
MOVE.L FileHandle(PC),D1
JSR -$0024(A6) ;close
;----------- both used, for IFF AND RAW -----------
rpnskp2: BSR.S AddPreset
BSR.W ShowPEDnumbers ;refresh preset numbers
BRA.W IsPLSTFull
chkiffbuffer: dc.l 0,0,0
CouldBeInfo: CMP.B #$69,(A0)+
BNE.W rpnskip
CMP.B #$6E,(A0)+
BNE.W rpnskip
CMP.B #$66,(A0)+
BNE.W rpnskip
CMP.B #$6F,(A0)+
BNE.W rpnskip
CMP.B #0,(A0)+
BNE.W rpnskip
BRA.W IsPLSTFull
ReadPathEnd: MOVE.L DOSBase(PC),A6
MOVE.L FileLock(PC),D1
BEQ.S rpeskip
JSR -$005A(A6) ;unlock
rpeskip: JSR SetNormalPtrCol
BSR.W ShowPresetNames
BRA.W ShowAllRight
UnlockReadPath: MOVE.L DOSBase(PC),A6
MOVE.L FileLock(PC),D1
BEQ.B urpend
JSR -$005A(A6) ;unlock
urpend: JMP SetErrorPtrCol
;----------------------------------------------- add one PLST entry ----
AddPreset: LEA PedDefaultVol(PC),A0
LEA PresetName(PC),A1
MOVEQ #21,D0 ;#5
clearme: CLR.B (A1)+
DBRA D0,clearme
LEA PresetName(PC),A1
MOVEQ #5,D0 ;disk ST-XX
loopos MOVE.B (A0)+,(A1)+
DBRA D0,loopos
LEA FIB_FileName,A0
MOVEQ #14,D0 ,name 16 letters
aploop2: MOVE.B (A0)+,D1
BEQ.S aploop3
MOVE.B D1,(A1)+
DBRA D0,aploop2
aploop3: CLR.B (A1)
MOVE.L FIB_FileSize,D0
CMP.L #$0000FFFE,D0
BLS.S apskip2
MOVE.W #$FFFE,D0
apskip2: LSR #1,D0 ;getme
MOVE D0,PresetLength
CLR PresetFineTune
LEA PresetName(PC),A6
BSR.W PED_CheckAdd ;check if real
ADDQ #1,PresetTotal
ADD.L #30,MaxPLSTOffset
RTS
PED_Insert: TST.L PLSTmem
BNE.S pediwok
BSR.W AllocPLST
TST.L PLSTmem
BEQ.W PLSTMemErr
pediwok:
MOVE.W PresetTotal(PC),D0
CMP.W MaxPLSTEntries2,D0
BHS.W PLSTisFull
LEA InsertPsetText(PC),A0
LEA PresetName(PC),A1
MOVEQ #39,D0
pediloop:
MOVE.B (A0)+,(A1)+
DBRA D0,pediloop
PossibleEdit:
JSR StorePtrCol
JSR SetWaitPtrCol
MOVE.L TextBplPtr(PC),A0
LEA $2320(A0),A0 ;koordinates, 2320*2
MOVEQ #59,D0
pediloop2:
;CLR.L (A0)+
;DBRA D0,pediloop2
LEA EnterDataText(PC),A0
BSR.W ShowStatusText ;status message
MOVE.W #63,LineCurY ;set cursor
LEA PresetName(PC),A6
MOVEQ #3,D7
MOVE.B #4,EnterTextFlag
ShowPsetText:
LEA PresetName+3(PC),A0
MOVEQ #37,D0 ;length
MOVE.W #2321*2-1,D1 ;#$1221,D1 ;koordinates
BSR.W ShowText3 ;print to edit samplenametext
MOVE.W D7,D0
SUBQ.W #3,D0
ASL.W #3,D0
ADDI.W #12,D0
MOVE.W D0,LineCurX
JSR UpdateLineCurPos
pediwaitkey:
JSR DoKeyBuffer
MOVE.B RawKeyCode(PC),D0
BEQ.B pediwaitkey
JSR CheckLAmigaKeys
BTST #7,D0 ;wait delay
BNE.B pediwaitkey
CLR.B RawKeyCode
ANDI.W #$00FF,D0
CMPI.B #$45,D0
BEQ.W PED_ESCkey
CMPI.B #$41,D0
BEQ.W PED_BKspaceKey
CMPI.B #$44,D0
BEQ.W PED_ReturnKey
CMPI.B #$4F,D0
BEQ.W PED_LeftArrowKey
CMPI.B #$4E,D0
BEQ.W PED_RightArrowKey
CMPI.B #$40,D0
BHI.B pediwaitkey
CMPI.W #$0028,D7
BEQ.B pediwaitkey
CMPI.W #$0016,D7
BEQ.B pediwaitkey
tst keymapmem
beq.s itk5
move.l keymapmem,A0
bra.s itk6
itk5: LEA UnShiftedKeymap(PC),A0
itk6: TST.W ShiftKeyStatus
BEQ.B ShiftKeySkip
TST keymapmem
beq.s itk7
move.l keymapmem,A0
add.l #65,A0
bra.s ShiftKeySkip
itk7:
LEA ShiftedKeymap(PC),A0
;------
ShiftKeySkip:
MOVE.B (A0,D0.W),D1
BEQ.W pediwaitkey
CMPI.W #6,D7
BCS.B ShiftedKeySkip2
CMPI.W #$0019,D7
BCS.B PED_PrintChar
ShiftedKeySkip2:
CMPI.B #$30,D1
BCS.W pediwaitkey
CMPI.B #$66,D1
BHI.W pediwaitkey
CMPI.B #$39,D1
BLS.B PED_PrintChar
CMPI.B #$61,D1
BCC.B PED_PrintChar
BRA.W pediwaitkey
PED_PrintChar:
MOVE.B D1,(A6,D7.W)
BRA.W PED_RightArrowKey
PED_ReturnKey:
CMPI.B #' ',(PsetNameText)
BEQ.B PED_ESCkey
LEA PsetVolText,A0
LEA fitutexttab+32(PC),A1
MOVE.B (A0)+,D1
LSL.W #8,D1
MOVE.B (A0),D1
MOVEQ #15,D0
vofloop:
CMP.W -(A1),D1
BEQ.B vofound
DBRA D0,vofloop
MOVEQ #0,D0
vofound:
MOVE.W D0,PresetFineTune
LEA PsetLenText(PC),A0
BSR.W HexToInteger
LSR.W #1,D0
MOVE.W D0,PresetLength
LEA PsetRepeatText(PC),A0
BSR.W HexToInteger
LSR.W #1,D0
MOVE.W D0,PresetRepeat
LEA PsetReplenText(PC),A0
BSR.W HexToInteger
LSR.W #1,D0
MOVE.W D0,PresetReplen
BSR.W PED_CheckAdd
ADDQ.W #1,PresetTotal
PED_ESCkey:
CLR.W LineCurX
MOVE.W #$010E,LineCurY
JSR UpdateLineCurPos
BSR.W ShowPresetNames
BSR.W ShowPEDnumbers
BSR.W ShowAllRight
CLR.B EnterTextFlag
JMP RestorePtrCol
PED_BKspaceKey:
CMPI.W #$0017,D7
BCC.B pedbsend
CMPI.W #6,D7
BLS.B pedbsend
SUBQ.W #1,D7
MOVE.B #$20,(A6,D7.W)
pedbsend:
BRA.W ShowPsetText
PED_LeftArrowKey:
SUBQ.W #1,D7
CMPI.W #2,D7
BLS.B pedlakskip2
CMPI.W #5,D7
BEQ.B pedlakskip
CMPI.W #$0016,D7
BEQ.B pedlakskip
CMPI.W #$0019,D7
BEQ.B pedlakskip
CMPI.W #$001E,D7
BEQ.B pedlakskip
CMPI.W #$0023,D7
BEQ.B pedlakskip
BRA.W ShowPsetText
pedlakskip:
SUBQ.W #1,D7
BRA.W ShowPsetText
pedlakskip2:
MOVEQ #3,D7
BRA.W ShowPsetText
PED_RightArrowKey:
ADDQ.W #1,D7
CMPI.W #5,D7
BEQ.B pedrakskip
CMPI.W #$0016,D7
BEQ.B pedrakskip
CMPI.W #$0019,D7
BEQ.B pedrakskip
CMPI.W #$001E,D7
BEQ.B pedrakskip
CMPI.W #$0023,D7
BEQ.B pedrakskip
CMPI.W #$0028,D7
BCC.B pedrakskip3
BRA.W ShowPsetText
pedrakskip:
ADDQ.W #1,D7
BRA.W ShowPsetText
pedrakskip3:
MOVEQ #$27,D7
BRA.W ShowPsetText
;------------- check addpreset
PED_CheckAdd: ;23 length
MOVEQ #$17,D0 ;max length of sample name in PED list
pedcaloop:
SUBQ.W #1,D0 ;-1
CMP.B #' ',0(A6,D0.W) ;space ?
BEQ.B pedcaloop ;yep, one back
CLR.B 1(A6,D0.W)
MOVEA.L PLSTmem(PC),A5
SUB #30,A5 ;fix
LEA 30(A5),A5
pedccnextloop:
MOVEQ #6,D0
TST.B 6(A5)
BEQ.S PED_AddPreset
PED_ConvertLoop:
MOVE.B (A5,D0.W),D2
BNE.S PED_ConvertCase
TST.B (A6,D0.W)
BNE.S PED_ConvertCase
CLR.B 6(A5)
SUBQ #1,PresetTotal
BRA.S PED_AddPreset
PED_ConvertCase:
CMP.B #'A',D2
BCS.S pedccskip
CMP.B #'Z',D2
BHI.S pedccskip
ADD.B #32,D2
pedccskip:
MOVE.B 0(A6,D0.W),D1
;CMP.B #' ',D1
;BEQ.S pedccskip3
CMP.B #'A',D1
BCS.S pedccskip2
CMP.B #'Z',D1
BHI.S pedccskip2
ADD.B #32,D1
pedccskip2:
CMP.B D2,D1
BEQ.S pedccnext
BHI.S pedccskip3
BRA.S PED_AddPreset
pedccnext:
ADDQ #1,D0
CMP.W #$0016,D0
BNE.B PED_ConvertLoop
pedccskip3:
LEA 30(A5),A5
BRA.B pedccnextloop
PED_AddPreset:
TST.B 6(A5) ;file already in PLST?
BEQ.S pedapskip ;yep, skip it
MOVE.L PLSTmem(PC),A1
SUB #30,A1 ;fix!
MOVE PresetTotal(PC),D0
BEQ.S pedapskip
MULU #30,D0
ADDA.L D0,A1
LEA 30(A1),A1
CLR.B 31(A1)
pedaploop:
MOVE (A1),30(A1)
SUBQ.L #2,A1
CMP.L A1,A5
BLS.B pedaploop
pedapskip:
MOVEQ #21,D0
pedaploop2:
MOVE.B (A6,D0.W),D1
ADD.B #32,D1 ;fix
CMP.B #'A',D1
BCS.S pedapskip2
CMP.B #'Z',D1
;BHI pedapskip2
;ADD.B #32,D1 ;fix
pedapskip2:
SUB.B #32,D1 ;fix
;CMP.B #' ',D1 ;space?
;BNE.S pedapskip3
CMP.B #$00,D1 ;fix
BNE.S pedapskip3 ;fix
MOVEQ #0,D1
pedapskip3:
MOVE.B D1,(A5,D0.W)
DBRA D0,pedaploop2
MOVE.W PresetLength(PC),$0016(A5)
MOVE.B PresetFineTune+1(PC),$0018(A5)
MOVE.B #$40,$0019(A5)
MOVE.W PresetRepeat(PC),$001A(A5)
MOVE.W PresetReplen(PC),$001C(A5)
RTS
HexToInteger: MOVEQ #0,D0
BSR.S Single_hti
LSL #8,D1
LSL #4,D1
OR D1,D0
BSR.S Single_hti
LSL #8,D1
OR D1,D0
HexToInteger2: BSR.S Single_hti
LSL #4,D1
OR D1,D0
BSR.S Single_hti
OR D1,D0
RTS
Single_hti: MOVEQ #0,D1
MOVE.B (A0)+,D1
CMP.B #$60,D1
BCS.S shtiskip
SUB.B #$20,D1
shtiskip: SUB.B #$30,D1
CMP.B #9,D1
BLS.S reet
SUBQ.B #7,D1
reet: RTS
PED_Delete: JSR SetDeletePtrCol
MOVE.W #1,PED_Action
LEA SelectEntryText(PC),A0
BRA.W ShowStatusText
PED_ClearPLST: LEA ClearPLSTText,A0
JSR AreYouSure
BEQ.B PED_ClearPLST2
RTS
PED_ClearPLST2: BSR.W FreePLST
BRA.W PED_Refresh
ClearPLSTText: dc.b 10,10,10,' Clear the PLST?',0,0
PED_Print:
LEA PrintPLSTText,A0
JSR AreYouSure
BEQ.B PED_Print2
RTS
PED_Print2:
JSR StorePtrCol
MOVEA.L DOSBase,A6
MOVE.L #PrintPath,D1
MOVE.L #$000003EE,D2
JSR -$001E(A6) ;Open
MOVE.L D0,FileHandle
BEQ.W CantOpenFile
JSR SetDiskPtrCol
MOVE.L D0,D1
MOVE.L #PsetPLSTtext,D2
MOVEQ #$38,D3
JSR -$0030(A6) ;Write
LEA PrintingPLSTText(PC),A0
BSR.W ShowStatusText
CLR.W PsetNumTemp
pedpmainloop:
MOVE.W PsetNumTemp(PC),D0
LEA PsetPrtNumText(PC),A0
BSR.W IntToDecASCII ;2 jumps
MOVEA.L PLSTmem(PC),A0
SUB #30,A0 ;fix
MOVE.W PsetNumTemp(PC),D0
MULU.W #30,D0
ADDA.L D0,A0
MOVE.L A0,PsetPtrTemp
LEA PsetPrtNameText(PC),A1
MOVEA.L A1,A2
MOVEQ #$13,D1
FillSpaceLoop:
MOVE.B #' ',(A2)+
DBRA D1,FillSpaceLoop
MOVEQ #$13,D1
pedploop:
TST.B (A0)
BEQ.B pedpskip
MOVE.B (A0)+,(A1)+
DBRA D1,pedploop
pedpskip:
MOVEA.L PsetPtrTemp(PC),A1
MOVE.W $0016(A1),D0
LEA PsetPrtLenText(PC),A0
BSR.W IntToHexASCII
MOVEA.L PsetPtrTemp(PC),A1
MOVE.W $001A(A1),D0
LEA PsetPrtRepeatText(PC),A0
BSR.W IntToHexASCII
MOVEA.L PsetPtrTemp(PC),A1
MOVE.W $001C(A1),D0
ADD.W D0,D0
LEA PsetPrtRepLenText(PC),A0
BSR.B IntToHexASCII
MOVE.L FileHandle(PC),D1
MOVE.L #PsetPrtNumText,D2
MOVEQ #$35,D3
JSR -$0030(A6) ;Write
BTST #2,$00DFF016
BEQ.B AbortPLSTPrint
ADDQ.W #1,PsetNumTemp
MOVE.W PsetNumTemp(PC),D0
CMP.W PresetTotal(PC),D0
BNE.W pedpmainloop
BRA.B pedpend
AbortPLSTPrint:
LEA OprAbortedText(PC),A0
BSR.W ShowStatusText
JSR SetErrorPtrCol
pedpend:
MOVE.L FileHandle(PC),D1
JSR -$0024(A6) ;close
BSR.W ShowAllRight
JMP RestorePtrCol
IntToDecASCII:
MOVEQ #3,D3
MOVE.L #$000003E8,D2
itdloop:
EXT.L D0
DIVU.W D2,D0
ADDI.B #$30,D0
MOVE.B D0,(A0)+
DIVU.W #10,D2
SWAP D0
DBRA D3,itdloop
RTS
IntToHex2:
MOVEQ #1,D2
BRA.B ithaloop
IntToHexASCII:
MOVEQ #3,D2
ithaloop:
MOVE.W D0,D1
ANDI.B #15,D1
CMPI.B #10,D1
BCS.B ithaskip
ADDQ.B #7,D1
ithaskip:
ADDI.B #'0',D1
MOVE.B D1,-(A0)
ROR.W #4,D0
DBRA D2,ithaloop
RTS
WritePLST:
LEA SavePLSTText,A0
JSR AreYouSure
BEQ.B WritePLST2
RTS
WritePLST2:
JSR StorePtrCol
JSR SetDiskPtrCol
LEA SavingPLSTText(PC),A0
BSR.W ShowStatusText
LEA PTPath,A0
JSR CopyPath
LEA PLSTName(PC),A0
MOVEQ #4,D0
dsploop:
MOVE.B (A0)+,(A1)+
DBRA D0,dsploop
MOVE.L #FileName,D1
MOVE.L #$000003EE,D2
MOVEA.L DOSBase,A6 ;DOSBase
JSR -$001E(A6) ;Open
MOVE.L D0,D7
BEQ.W CantOpenFile
MOVE.L D0,D1
MOVE.L PLSTmem(PC),D2
MOVE.W PresetTotal(PC),D3
MULU.W #$001E,D3
JSR -$0030(A6) ;Write
MOVE.L D7,D1
JSR -$0024(A6) ;Close
BSR.W ShowAllRight
JMP RestorePtrCol
CheckPEDnames:
BSR.W PED_PsetHit ,check the clicked filename
CLR PED_Action
JSR SetNormalPtrCol
RTS
PED_OneUp:
SUBQ.W #1,PEDPos
TST.W ShiftKeyStatus
BNE.B poup2
JSR Wait_4000
BTST #2,$00DFF016
BNE.B pedouskip
poup2:
SUBQ.W #7,PEDPos
pedouskip:
CMP.W #1,PEDPos ;fix
BGE.B ShowPresetNames
PED_Top:
MOVE.W #1,PEDPos
BRA.B ShowPresetNames
PED_OneDown:
CMP.W #9,PresetTotal
BCS.B ShowPresetNames
JSR Wait_4000
ADDQ.W #1,PEDPos
TST.W ShiftKeyStatus
BNE.B podn2
BTST #2,$00DFF016
BNE.B pedodskip
podn2:
ADDQ.W #7,PEDPos
pedodskip:
MOVE.W PresetTotal,D0
SUBI.W #10,D0
CMP.W PEDPos,D0
BCC.B ShowPresetNames
pedodsx:
MOVE.W D0,PEDPos
BRA.B ShowPresetNames
PED_Bottom:
MOVE.W PresetTotal(PC),D0
SUBI.W #11,D0
BMI.B PED_Top
ADDQ.W #1,D0
BRA.B pedodsx
ShowPresetNames:
BSR.W DctMainScr1_7
CMP.W #0,PresetTotal ;plst empty?
BEQ.S mekka ;yes
MOVE.W #2321,D6 ;old #$1221 y-position global list
MOVEQ #9,D7 ; max line numbers
MOVE.L PLSTmem(PC),D0
SUB #30,D0 ;fix
BNE.B ShowPresetNames2
mekka: RTS
ShowPresetNames2:
MOVEA.L D0,A5
MOVE.W PEDPos(PC),D0
MULU.W #30,D0
ADDA.L D0,A5
spndploop:
TST.B (A5)
BNE.B spndploop2
RTS
spndploop2:
LEA PresetNameText,A1
MOVEQ #$15,D0
spnloop:
MOVE.B #' ',(A1)+ ;empty string
DBRA D0,spnloop
MOVEA.L A5,A0
ADDQ.L #3,A0
LEA -$0016(A1),A1
spnloop2:
MOVE.B (A0)+,D0
BEQ.B DisplayPreset
MOVE.B D0,(A1)+
BRA.B spnloop2
fitutexttab:
dc.b ' 0+1+2+3+4+5+6+7-8-7-6-5-4-3-2-1'
;--------- output for PED listview --------------------
DisplayPreset:
MOVE #19,TextLength
LEA PresetNameText,A0 ;sample name text
MOVE D6,D1
MULU #2,D1 ;fix offset*2 new for 3.30
SUB #1,D1
MOVE D1,TextOffset
BSR.W ShowText2 ;fix old Showtext3
ADD #20,D6
MOVE D6,TextOffset
MOVEQ #0,D0
MOVE.B 24(A5),D0
AND.B #$0F,D0
ADD D0,D0
LEA fitutexttab(PC,D0.W),A0
MOVE #2,TextLength ;length
MOVE D6,D1 ;fix new
MULU #2,D1 ;fix new
SUB #21,D1 ;fix new
MOVE D1,TextOffset ;fix new
BSR.W ShowText2 ;fix sample finetune text
MOVE 22(A5),D0
ADD D0,D0
MOVE D0,WordNumber
ADDQ #1,TextOffset
BSR.W PrintHexWord ;sample length text
MOVE 26(A5),D0
ADD D0,D0
MOVE D0,WordNumber
ADDQ #1,TextOffset
BSR.W PrintHexWord ;sample repeat text
MOVE 28(A5),D0
ADD D0,D0
MOVE D0,WordNumber
ADDQ #1,TextOffset
BSR.W PrintHexWord ;sample replen text
ADDI.W #$00DC,D6
LEA $001E(A5),A5
DBRA D7,spndploop
RTS
PED_EnterPath:
MOVE #$12,D1
JSR StorePtrCol
JSR SetWaitPtrCol
CLR.L EditMode
LEA PEdDefaultPath,A6 ;old 6
JSR UpdateLineCurPos
MOVE.L A6,TextEndPtr
MOVE.L A6,ShowTextPtr
ADD.L #31,TextEndPtr
MOVE.W #20,TextLength
MOVE.L #178*2-18,A4 ;fix x-position entertext
JSR GetTextLine
CLR.L TextEndPtr
JMP RestorePtrCol
PED_Disk:
JSR StorePtrCol
JSR SetWaitPtrCol
CLR.L EditMode
CLR.B SndDiskNum0
CLR.B SndDiskNum1
LEA SndDiskNum0(PC),A6
MOVE.L A6,TextEndPtr
MOVE.L A6,ShowTextPtr
ADDQ.L #2,TextEndPtr
MOVE.W #2,TextLength
MOVEA.L #$000004C5,A4
MOVE.B #3,EnterTextFlag
JSR GetTextLine
LEA SndDiskNum0(PC),A6
MOVE.B #':',2(A6)
CLR.B EnterTextFlag
CLR.L TextEndPtr
JMP RestorePtrCol
ShowPEDnumbers:
MOVE.W PresetTotal,WordNumber
MOVE.W #$0835,TextOffset
BSR.W Print4DecDigits ;preset numbers
LEA PEdDefaultPath,A0 ;PEdDefaultPath
MOVE.W #$0152,D1
MOVEQ #$14,D0
BSR.W ShowText3 ;default path
LEA PedDefaultVol,A0
MOVE.W #$04C2,D1
MOVEQ #6,D0
BRA.W ShowText3
PED_PsetHit: CMP #1,PresetTotal ;PLST empty ?
BEQ.S pedphend
MOVE MouseX2(PC),D0
MOVE D1,D0
SUB #59,D0
DIVU #6,D0
MOVE.L D0,D1
SWAP D1
CMP #5,D1
BEQ.S pedphend
MOVE D0,D2
ADD PEDPos(PC),D2
CMP PresetTotal(PC),D2 ;how many
BHI.S pedphend
MULU #30,D0 ;xposition mem
MOVE.L PLSTmem(PC),A5
ADD.L D0,A5
MOVE PEDPos(PC),D0
SUB #1,D0
MULU #30,D0
ADD.L D0,A5
TST PED_Action
BEQ.S PED_CopyName
CMP.W #1,PED_Action
BEQ.S PED_DoDelete
pedphend: RTS
PED_CopyName: LEA PresetName(PC),A0
MOVEQ #21,D0
pedcnloop: MOVE.B (A5)+,D1
BNE.S pedcnskip
MOVE.B #' ',D1
pedcnskip:
MOVE.B D1,(A0)+
DBRA D0,pedcnloop
MOVEQ #0,D0
MOVE.B 2(A5),D0
ANDI.B #$0F,D0
ADD.W D0,D0
LEA fitutexttab(PC),A1
LEA (A1,D0.W),A1
LEA PsetVolText,A0
MOVE.B #' ',-1(A0)
MOVE.B (A1)+,(A0)+
MOVE.B (A1),(A0)
MOVE.W (A5),D0
ADD.W D0,D0
LEA 6(A0),A0
BSR.W IntToHexASCII
MOVE.W 4(A5),D0
ADD.W D0,D0
LEA 9(A0),A0
BSR.W IntToHexASCII
LEA 9(A0),A0
MOVE.W 6(A5),D0
ADD.W D0,D0
BSR.W IntToHexASCII
BRA.W PossibleEdit
PED_DoDelete:
CLR.W PED_Action
LEA DeletePresetText,A0
JSR AreYouSure
BEQ.B PED_DoDelete2
RTS
PED_DoDelete2:
MOVEA.L PLSTmem(PC),A1
MOVE.W PresetTotal(PC),D0
MULU.W #$001E,D0
ADDA.L D0,A1
pedddloop:
MOVE 30(A5),(A5)
ADDQ.L #2,A5
CMP.L A5,A1
BHI.S pedddloop
CLR.B (A5)
SUBQ #1,PresetTotal
SUB.L #30,MaxPLSTOffset
MOVE PEDPos(PC),D0
ADD #9,D0
CMP PresetTotal(PC),D0
BHI.S pedddskip
SUBQ #1,PEDPos
pedddskip:
BSR.W ShowPEDnumbers
BSR.W PED_OneUp
BSR.W ShowPresetNames
JSR SetNormalPtrCol
JSR StorePtrCol
RTS
;sepc: JMP SetErrorPtrCol ;not used
PLSTisFull:
LEA PLSTFullText(PC),A0
BSR.W ShowStatusText
JMP SetErrorPtrCol
PED_DeleteDisk:
LEA DelDiskText(PC),A0
MOVE.B SndDiskNum0(PC),10(A0)
MOVE.B SndDiskNum1(PC),11(A0)
JSR AreYouSure
BEQ.B PED_DelDD2
RTS
PED_DelDD2:
JSR StorePtrCol
JSR SetWaitPtrCol
MOVEA.L PLSTmem(PC),A0
MOVEA.L A0,A1
MOVE.W PresetTotal(PC),D0
MULU.W #$001E,D0
ADDA.L D0,A1
MOVE.L SndDiskNum0-1(PC),D1 ;SndDiskNum0-1
MOVE.L #$FF5F5FFF,D2
AND.L D2,D1
peddslo:
MOVE.L 2(A0),D0
AND.L D2,D0
CMP.L D1,D0
BNE.B peddsno
MOVEA.L A0,A2
peddslp:
MOVE.W $001E(A0),(A0)+
CMPA.L A1,A0
BCS.B peddslp
SUBQ.W #1,PresetTotal
SUBI.L #30,MaxPLSTOffset
MOVEA.L A2,A0
BRA.B peddsn1
peddsno:
LEA 30(A0),A0
peddsn1:
CMPA.L A1,A0
BCS.B peddslo
MOVE.W #1,PEDPos
BSR.W ShowPEDnumbers
BSR.W ShowPresetNames
JMP RestorePtrCol
DelDiskText:
dc.b 'Delete ST-.. ?',0,0